package com.yanmaohu.nikita.utility;

/**
 * @author Bright Lee
 */
public final class TokenUtility {

    public static boolean isIdentifierFirstChar(int c) {
        return (c >= 'a' && c <= 'z') || c == '_' || (c >= 'A' && c <= 'Z');
    }

    public static boolean isIdentifierTailChar(int c) {
        return (c >= 'a' && c <= 'z') || c == '_' || (c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z');
    }

    public static boolean isIdentifier(String content) {
        if (content == null || content.isEmpty()) {
            return false;
        }
        char c = content.charAt(0);
        if (!isIdentifierFirstChar(c)) {
            return false;
        }
        for (int i = 1; i < content.length(); i++) {
            c = content.charAt(i);
            if (!isIdentifierTailChar(c)) {
                return false;
            }
        }
        return true;
    }

    public static boolean isDigital(int c) {
        return c >= '0' && c <= '9';
    }

    public static boolean isSeparator(int c) {
        if (c < 0) {
            return true;
        }
        if (Character.isWhitespace(c)) {
            return true;
        }
        if (c == '+') {
            return true;
        }
        if (c == '-') {
            return true;
        }
        if (c == '*') {
            return true;
        }
        if (c == '/') {
            return true;
        }
        if (c == '%') {
            return true;
        }
        if (c == '^') {
            return true;
        }
        if (c == '=') {
            return true;
        }
        if (c == '&') {
            return true;
        }
        if (c == '|') {
            return true;
        }
        if (c == '!') {
            return true;
        }
        if (c == '<') {
            return true;
        }
        if (c == '>') {
            return true;
        }
        if (c == '~') {
            return true;
        }
        if (c == '(') {
            return true;
        }
        if (c == ')') {
            return true;
        }
        if (c == '[') {
            return true;
        }
        if (c == ']') {
            return true;
        }
        if (c == '{') {
            return true;
        }
        if (c == '}') {
            return true;
        }
        if (c == ',') {
            return true;
        }
        if (c == '.') {
            return true;
        }
        if (c == '?') {
            return true;
        }
        if (c == ':') {
            return true;
        }
        if (c == ';') {
            return true;
        }
        return false;
    }

    public static boolean isWhitespace(int c) {
        if (c == ' ' || c == '\n' || c == '\r' || c == '\t') {
            return true;
        }
        return false;
    }

    public static boolean isEscapeChar(int c) {
        if (c == 'a') {
            return true;
        }
        if (c == 'b') {
            return true;
        }
        if (c == 'f') {
            return true;
        }
        if (c == 'n') {
            return true;
        }
        if (c == 'r') {
            return true;
        }
        if (c == 't') {
            return true;
        }
        if (c == 'v') {
            return true;
        }
        if (c == '\\') {
            return true;
        }
        if (c == '\'') {
            return true;
        }
        if (c == '"') {
            return true;
        }
        if (c == '0') {
            return true;
        }
        return false;
    }

}
